{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "6c96e1e7",
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "\n",
    "os.environ['CUDA_VISIBLE_DEVICES'] = '1'\n",
    "os.environ['TF_FORCE_GPU_ALLOW_GROWTH'] = 'true'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "c013d091",
   "metadata": {},
   "outputs": [],
   "source": [
    "from transformers import AutoTokenizer, AutoModelForCausalLM, TextStreamer\n",
    "from peft import LoraConfig, get_peft_model, AutoPeftModelForCausalLM, PeftModel\n",
    "import torch"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "34f8cc39",
   "metadata": {},
   "outputs": [],
   "source": [
    "tokenizer = AutoTokenizer.from_pretrained('unsloth/Llama-3.2-1B-Instruct')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "272e2ca6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "CommitInfo(commit_url='https://huggingface.co/mesolitica/malaysian-Llama-3.2-1B-Instruct/commit/f5716b03084ce750352fbdd5568ad4c7f2c6e4e8', commit_message='Upload tokenizer', commit_description='', oid='f5716b03084ce750352fbdd5568ad4c7f2c6e4e8', pr_url=None, pr_revision=None, pr_num=None)"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tokenizer.push_to_hub('mesolitica/malaysian-Llama-3.2-1B-Instruct')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "f6d2bdcb",
   "metadata": {},
   "outputs": [],
   "source": [
    "streamer = TextStreamer(tokenizer)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "7a5be3ef",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Some weights of LlamaForCausalLM were not initialized from the model checkpoint at unsloth/Llama-3.2-1B-Instruct and are newly initialized: ['lm_head.weight']\n",
      "You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.\n"
     ]
    }
   ],
   "source": [
    "ori_model = AutoModelForCausalLM.from_pretrained(\n",
    "    'unsloth/Llama-3.2-1B-Instruct', tie_word_embeddings=False\n",
    ").cuda()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "4220fb72",
   "metadata": {},
   "outputs": [],
   "source": [
    "ori_model.lm_head.weight.data = ori_model.model.embed_tokens.weight.data.clone()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "c2ab6c40",
   "metadata": {},
   "outputs": [],
   "source": [
    "state_dict = ori_model.state_dict()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "314486b6",
   "metadata": {},
   "outputs": [],
   "source": [
    "from safetensors import safe_open\n",
    "\n",
    "f = safe_open(f\"1b/adapter_model.safetensors\", framework=\"pt\", device=0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "f75d1173",
   "metadata": {},
   "outputs": [],
   "source": [
    "keys = f.keys()\n",
    "keys = sorted(list(set([k.split('.lora')[0] for k in keys if '.lora' in k])))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "e730eea3",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████████████████████████████████████████████████████████████████████████████████████| 114/114 [00:00<00:00, 309.27it/s]\n"
     ]
    }
   ],
   "source": [
    "from tqdm import tqdm\n",
    "\n",
    "for k in tqdm(keys):\n",
    "    k_ori = k.replace('base_model.model.', '') + '.weight'\n",
    "    if 'embed_tokens' in k:\n",
    "        post_A = '.lora_embedding_A'\n",
    "        post_B = '.lora_embedding_B'\n",
    "    else:\n",
    "        post_A = '.lora_A.weight'\n",
    "        post_B = '.lora_B.weight'\n",
    "    A = k + post_A\n",
    "    B = k + post_B\n",
    "    \n",
    "    W = state_dict[k_ori]\n",
    "    if 'embed_tokens' not in k:\n",
    "        W = W.t()\n",
    "        \n",
    "    A = f.get_tensor(A)\n",
    "    B = f.get_tensor(B)\n",
    "    with torch.no_grad():\n",
    "        W.addmm_(A.t(), B.t(), alpha = 2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "626a66b2",
   "metadata": {},
   "outputs": [],
   "source": [
    "# model = AutoPeftModelForCausalLM.from_pretrained(\n",
    "#     'mesolitica/lora-embedding-256-llama3.2-3b-multipack', torch_dtype=torch.bfloat16,\n",
    "# )\n",
    "# _ = model.cuda()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "443a56bb",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "The attention mask and the pad token id were not set. As a consequence, you may observe unexpected behavior. Please pass your input's `attention_mask` to obtain reliable results.\n",
      "Setting `pad_token_id` to `eos_token_id`:None for open-end generation.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<|begin_of_text|><|start_header_id|>system<|end_header_id|>\n",
      "\n",
      "Cutting Knowledge Date: December 2023\n",
      "Today Date: 21 Oct 2024\n",
      "\n",
      "<|eot_id|><|start_header_id|>user<|end_header_id|>\n",
      "\n",
      "camne nk selesaikan masalah hutang negara<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n",
      "\n",
      "Terima kasih atas pertanyaan anda mengenai cara untuk menyelesaikan masalah hutang negara. Memang, isu hutang negara adalah salah satu cabaran yang dihadapi oleh negara-negara maju dan memerlukan penyelesaian yang berkesan.\n",
      "\n",
      "Untuk menyelesaikan masalah hutang negara, terdapat beberapa langkah yang boleh diambil:\n",
      "\n",
      "1. Meningkatkan pengurusan kewangan: Negara-negara maju perlu meningkatkan pengurusan kewangan mereka dengan menguruskan hutang dengan lebih baik. Ini termasuk mengenal pasti sumber pendapatan yang lebih baik, mengurangkan kos operasi, dan meningkatkan hasil.\n",
      "\n",
      "2. Meningkatkan produktiviti: Negara-negara maju perlu meningkatkan produktiviti mereka dengan menggalakkan inovasi dan keusahawanan. Ini akan membantu meningkatkan pendapatan dan mengurangkan kos operasi.\n",
      "\n",
      "3. Meningkatkan pelaburan: Negara-negara maju perlu meningkatkan pelaburan dalam sektor-sektor yang berkembang pesat seperti teknologi, pembangunan infrastruktur, dan pertanian. Ini akan membantu meningkatkan pendapatan dan mengurangkan hutang.\n",
      "\n",
      "4. Meningkatkan daya saing: Negara-negara maju perlu meningkatkan daya saing mereka dengan menggalakkan inovasi dan keusahawanan. Ini akan membantu meningkatkan pendapatan dan mengurangkan hutang.\n",
      "\n",
      "5. Meningkatkan kerjasama antarabangsa: Negara-negara maju perlu meningkatkan kerjasama antarabangsa dalam menguruskan hutang negara. Ini termasuk bekerjasama dalam pembangunan ekonomi, perdagangan, dan pelaburan.\n",
      "\n",
      "Dengan mengambil langkah-langkah ini, negara-negara maju dapat menyelesaikan masalah hutang negara dan meningkatkan kesejahteraan rakyat mereka.<|eot_id|>\n"
     ]
    }
   ],
   "source": [
    "d = [\n",
    "    {'role': 'user', 'content': 'camne nk selesaikan masalah hutang negara'}\n",
    "]\n",
    "\n",
    "inputs = tokenizer.apply_chat_template(d, return_tensors = 'pt').to('cuda')\n",
    "generate_kwargs = dict(\n",
    "    input_ids=inputs,\n",
    "    max_new_tokens=512,\n",
    "    top_p=0.95,\n",
    "    top_k=50,\n",
    "    temperature=0.0,\n",
    "    do_sample=False,\n",
    "    repetition_penalty=1.05,\n",
    "    streamer=streamer\n",
    ")\n",
    "generation_output = ori_model.generate(**generate_kwargs)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "4aa125bb",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "The attention mask and the pad token id were not set. As a consequence, you may observe unexpected behavior. Please pass your input's `attention_mask` to obtain reliable results.\n",
      "Setting `pad_token_id` to `eos_token_id`:None for open-end generation.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<|begin_of_text|><|start_header_id|>system<|end_header_id|>\n",
      "\n",
      "Cutting Knowledge Date: December 2023\n",
      "Today Date: 21 Oct 2024\n",
      "\n",
      "<|eot_id|><|start_header_id|>user<|end_header_id|>\n",
      "\n",
      "code simple website hello world react, reply in jawi<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n",
      "\n",
      "اونتوق منچاڤاي لامن ويب هيللو ورلا دالم ريتيكل ايميج فيزيكال (REACT)⹁ اند بوليه مڠيکوتي بلوک بريکوت:\n",
      "\n",
      "١. تمبهکن کومين \"html\" بارو جک اي تيدق وجود:\n",
      "   ```jsx\n",
      "   <div className=\"container\">\n",
      "     {/*... } */}\n",
      "       <h1>Hello World</h1>\n",
      "   </div>\n",
      "   ```\n",
      "\n",
      "٢. ݢوناکن JSX يڠ سواست اونتوق ممبوات ستروکتور HTML دان فوڠسي اوتوماتيق نۏيو-جسون ترسديا:\n",
      "\n",
      "```jsx\n",
      "import React from'react';\n",
      "\n",
      "const HelloWorldPage = () => {\n",
      "    return (\n",
      "        <>\n",
      "           <!--... }}\n",
      "            <p>مرتي كموداه اين!</p>   \n",
      "          </>\n",
      "        />\n",
      "      );\n",
      "}\n",
      "\n",
      "export default HelloWorldPage;\n",
      "```\n",
      "\n",
      "٣. توليس فايل `index.html` اتاو `index.js` سباليق-والاٴي ديريکتوري اوتمنتو اونتوق سويتوه اوجي.\n",
      "\n",
      "٤. تتڤكن URL يڠ بتول دڠن رياکت:\n",
      "\n",
      "دسيني⹂ اوبه سموا لاجور داءيرراسي سدمىش سبلوم ملڠكڤکنڽ ک 'http://localhost:3000'، اداله چارا باٴيق اونتوق منتڤکن نيلاي URL سلبيه دڠن CSS.\n",
      "```css\n",
      "/* index.css */\n",
      "body { font-family: Arial, sans-serif; }\n",
      ".container { background-color: palegoldenrod; padding: 20px;}\n",
      "```\n",
      "٥. ايمڤورت مودولو ﴿ماودولو﴾ دري جدوال تيبيت اونيکل (`useModulo`) جک کامي ممبوليهکن موتايليروڠ مکسيموم:\n",
      "```javascript\n",
      "<Modal {...modal} isOpen onClose={handleClose}>\n",
      "  {/*... } %}\n",
      "</Modal>\n",
      "\n",
      "<script setup import * as Modal from './modals/modal'; // هاڽ بوكو ببراڤ اراين يڠ دڤرليبس اس کدالم ڬلوب. -->\n",
      "```\n",
      "داون جاڠن لوڤاسک لامن ويب دڠن رياکت:\n",
      "\n",
      "*سترينتشن**: أرتيكلت اصل تيدق ڤواسکن سمولا دڠن کود ڤرانتي ستياڤ تمبهن يڠ دلنجوتکن. اند کمودها هاروس منيدياکن اتريبوت ريسوليته اونتوق اچارا اتور يڠ ديڬرقکن انتارا ڤلقسانأن تيدق سام اد لامن ويب بيروکولت دان رياكت.***\n",
      "\n",
      "٨. اخيرڽ⹂ جالنکن لامن ويب اونتوق مليهتڽ يڠ بوليه دسسوايکن:\n",
      "*ماري ايجين اول: npm run start || yarn serve*\n",
      "\n",
      "اند امت بوليه مڠهنتر اكسس لامن ديريکتوري `build/index.html` سماس مماڠݢيل `npm run dev` اتاو `yarn`. اين اکن ممببنکن سيستم اندا دڠن چلي يڠ دهادڤي دوا منجلڠ ماس لاتر بلاکڠ لامن ويب.<|eot_id|>\n"
     ]
    }
   ],
   "source": [
    "d = [\n",
    "    {'role': 'user', 'content': 'code simple website hello world react, reply in jawi'}\n",
    "]\n",
    "\n",
    "inputs = tokenizer.apply_chat_template(d, return_tensors = 'pt').to('cuda')\n",
    "generate_kwargs = dict(\n",
    "    input_ids=inputs,\n",
    "    max_new_tokens=1024,\n",
    "    top_p=0.95,\n",
    "    top_k=50,\n",
    "    temperature=0.9,\n",
    "    do_sample=True,\n",
    "    repetition_penalty=1.2,\n",
    "    streamer=streamer\n",
    ")\n",
    "generation_output = ori_model.generate(**generate_kwargs)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "a0495b30",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "The attention mask and the pad token id were not set. As a consequence, you may observe unexpected behavior. Please pass your input's `attention_mask` to obtain reliable results.\n",
      "Setting `pad_token_id` to `eos_token_id`:None for open-end generation.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<|begin_of_text|><|start_header_id|>system<|end_header_id|>\n",
      "\n",
      "Cutting Knowledge Date: December 2023\n",
      "Today Date: 21 Oct 2024\n",
      "\n",
      "<|eot_id|><|start_header_id|>user<|end_header_id|>\n",
      "\n",
      "camne nk code react, reply in sabah<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n",
      "\n",
      "Bah kunuk sia mau kasi tau macam mana mo bikin sama kod React dalam bahasaSabah. Tingu saja la:\n",
      "\n",
      "1. Mula-muka dulu pakai package manager npm kalau ni belum ada lagi:\n",
      "```bash\n",
      "npm init -y # Bikin folder dengan laluan permintaan baru\n",
      "```\n",
      "2. Pasang semua perpustakaan yang kita perlukan (React Router, Axios untuk API):\n",
      "```sh\n",
      "cd my-app-react-project/\n",
      "npx create-next app.js && cd./app \n",
      "npm install axios --save-dev // Pastikan sudah import dari pakej global ya sebelum jalankan Next App.\n",
      "# Jangan buat pascafix kat terminal tu!\n",
      "```\n",
      "\n",
      "Jadi sini mungkin orang Sabah takut nak coding? Palui betul la kalau begitu... Kamurang faham ka apa yang saya cakap tadi?\n",
      "\n",
      "Kalau masih nda faham, bilangkan ja! Nanti saya terangkan lain-lain cara.\n",
      "\n",
      "**[Ikutan ini adalah salah satu contoh bagaimana ia boleh diselesaikannya]:**\n",
      "\n",
      "Menggunakan Redux + TypeScript sebagai sistem penghantaran keadaan kerja utama anda seperti di bawah...\n",
      "\n",
      "---\n",
      "\n",
      "Anda sedang membuat aplikasi web menggunakan JavaScript dan Node.js; alamat URL asas awalan disimpan secara selamat pada `window.location.origin`.\n",
      "\n",
      "Tugasnya ialah membina antara muka berbilang langkah semacam reaktif komponen widget dinamik tetapi mengingati prestasi pelaksanaannya supaya responsiviti tinggi dan pendapat netizen juga dapat menonton senarai nilai pertanyaan skrin mereka apabila data dikembalikan atau pemisahan DOM dibuat selepas rendering page telah lengkap.\n",
      "\n",
      "\n",
      "\n",
      "---<|eot_id|>\n"
     ]
    }
   ],
   "source": [
    "d = [\n",
    "    {'role': 'user', 'content': 'camne nk code react, reply in sabah'}\n",
    "]\n",
    "\n",
    "inputs = tokenizer.apply_chat_template(d, return_tensors = 'pt').to('cuda')\n",
    "generate_kwargs = dict(\n",
    "    input_ids=inputs,\n",
    "    max_new_tokens=1024,\n",
    "    top_p=0.95,\n",
    "    top_k=50,\n",
    "    temperature=0.9,\n",
    "    do_sample=True,\n",
    "    repetition_penalty=1.3,\n",
    "    streamer=streamer\n",
    ")\n",
    "generation_output = ori_model.generate(**generate_kwargs)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "f33a1242",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "The attention mask and the pad token id were not set. As a consequence, you may observe unexpected behavior. Please pass your input's `attention_mask` to obtain reliable results.\n",
      "Setting `pad_token_id` to `eos_token_id`:None for open-end generation.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<|begin_of_text|><|start_header_id|>system<|end_header_id|>\n",
      "\n",
      "Cutting Knowledge Date: December 2023\n",
      "Today Date: 21 Oct 2024\n",
      "\n",
      "<|eot_id|><|start_header_id|>user<|end_header_id|>\n",
      "\n",
      "camne nk selesaikan masalah hutang negara, reply in mandarin<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n",
      "\n",
      "解决国家债务问题需要采取多方面的方法，包括提高透明度、促进诚信和问责制，以及实施有效的政策和战略。以下是一些建议：\n",
      "\n",
      "1. 加强财政管理：政府应加强财政管理，确保公共部门的预算使用和支出是合理的。这可以通过建立健全的财务管理框架、监测和评估公共部门预算使用以及优先考虑可持续性和效率等措施来实现。\n",
      "2. 提高透明度：政府应提高透明度，提供有关公共部门预算使用和支出的信息。这可以通过发布预算数据、报告财务活动以及举行公开听证会等方式来实现。\n",
      "3. 执法和惩罚：政府应执法和惩罚腐败行为，特别是在公共部门。这可以通过设立独立调查机构、制定严厉的法律规定以及对腐败行为进行严厉处罚等措施来实现。\n",
      "4. 增加收入：政府应增加收入，例如税收、公私合作伙伴关系（PPP）和其他收入来源，以减少公共部门的负担。这可以通过实施税收改革、鼓励创业和发展 PPP 等措施来实现。\n",
      "5. 改善公共服务：政府应改善公共服务，例如教育、医疗保健和基础设施建设。这可以通过投资于基础设施建设、提高教育质量以及为公民提供更好的公共服务等措施来实现。\n",
      "\n",
      "总之，解决国家债务问题需要采取全面和多方面的方法，包括提高透明度、促进诚信和问责制，以及实施有效的政策和战略。通过采取这些措施，政府可以帮助减轻国家债务负担并促进经济增长。<|eot_id|>\n"
     ]
    }
   ],
   "source": [
    "d = [\n",
    "    {'role': 'user', 'content': 'camne nk selesaikan masalah hutang negara, reply in mandarin'}\n",
    "]\n",
    "\n",
    "inputs = tokenizer.apply_chat_template(d, return_tensors = 'pt').to('cuda')\n",
    "generate_kwargs = dict(\n",
    "    input_ids=inputs,\n",
    "    max_new_tokens=1024,\n",
    "    top_p=0.95,\n",
    "    top_k=50,\n",
    "    temperature=0.2,\n",
    "    do_sample=True,\n",
    "    repetition_penalty=1.1,\n",
    "    streamer=streamer\n",
    ")\n",
    "generation_output = ori_model.generate(**generate_kwargs)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "b5695827",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "The attention mask and the pad token id were not set. As a consequence, you may observe unexpected behavior. Please pass your input's `attention_mask` to obtain reliable results.\n",
      "Setting `pad_token_id` to `eos_token_id`:None for open-end generation.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<|begin_of_text|><|start_header_id|>system<|end_header_id|>\n",
      "\n",
      "Cutting Knowledge Date: December 2023\n",
      "Today Date: 21 Oct 2024\n",
      "\n",
      "<|eot_id|><|start_header_id|>user<|end_header_id|>\n",
      "\n",
      "camne nk selesaikan masalah hutang negara, reply in tamil<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n",
      "\n",
      "நீதியை நிவர்த்தி செய்வது என்பது கூட, இன்றைய நாடுகளில் உண்மையான அதிகாரங்களுடன் ஒழுங்கமைக்கப்பட்ட சட்டங்கள் மற்றும் அமலாக்க முறை பற்றிய போராட்டங்கள் உள்ளன. இந்த விஷயத்தில் பல விதமான நடவடிக்கைகள் உள்ளன:\n",
      "\n",
      "1. **Debt Management Strategy**: முதன்மைக் குடும்ப முதலீட்டைப் பொறுத்தவரை, மாற்று முறையான முதலீட்டைப் பாதுகாப்பதாகக் கருதப்படும் கொள்கைகளை நீக்கவும் மறுசீரமைவுப்படுத்தவும் உள்ள நாடுகள் திறம்பட நடவடிக்கை எடுக்கின்றன. இந்த முதலீட்டைப் பாதுகாக்க அதன் முக்கியத்துவத்தை மேம்படுத்துவது, ஆபத்தான நிர்வாகத்தைப் பற்றி உறுதியாக வாதிடுவது மற்றும் குடும்பத்தினர்-மாணவர்கள் கையகப் பேச்சுக்கு ஏற்றவாறு முயற்சி செய்தல்.\n",
      "\n",
      "2. **ஒத்துழைப்பு - ஓய்வு** மற்றும் மேம்பாடு (ODA) முறையை நியாயப்படுத்துதல்: ODA பல நாடுகள் பயன்படுத்தி வருகிறது, இது முதலீட்டைப் பாதுகாக்கும், குறைவான தன்மையைக் குறிக்கிறது மற்றும் அதிக மொத்த உள்நாட்டு உற்பத்தியை ஈர்க்கும். இது குறைந்த மக்கள்தொகையினரின் வாழ்க்கைச் சொத்துக்களில் குடும்பத்தினரின் பணி, அதன் மொத்த உற்பத்தியில் பங்களிப்புகளை மேம்படுத்த அதிக உயர்ந்த மானியங்களை ஒதுக்குவதன் மூலம் ஒழுங்குமுறைப்படுத்தப்படுகிறது.\n",
      "\n",
      "3. **Pension Fund or Social Security Administration (SSA)**: ஐக்கிய நாடுகளின் உதவிக்குழுவில் உள்ள சில நாடுகள் ஆசிரியர்கள் மற்றும் பயிற்சி நிறுவனங்களுக்கு அழுத்தப்பட்ட நிதியில் வழங்கும் நிறுவனங்களில் முதலீடு செய்வதன் மூலமும் வருவாயைப் பராமரிக்க அவை ஆகியன நம்பிக்கை கொண்டவை. NIFs இதற்குள் \"அவரது அடையாளங்களைப் பாதுகாக்க\" வரலாற்று முக்கியத்துவத்தையும் \"தரம்\" அனுபவங்களைப் பாதுகாக்க\" ஆகியவற்றை அளவிடும். MFIகளின் நிதியில் அரசாங்கம் வீடுகள் மற்றும் பாமாயில் தோட்டங்களுக்கு முன்னதாக, மேலும் அரசாங்கம் ஆயினும் எதிர்க்கட்சி சமூகங்கள் மற்றும் தனியார் நிறுவனங்கள் மலிவு மு\n"
     ]
    }
   ],
   "source": [
    "d = [\n",
    "    {'role': 'user', 'content': 'camne nk selesaikan masalah hutang negara, reply in tamil'}\n",
    "]\n",
    "\n",
    "inputs = tokenizer.apply_chat_template(d, return_tensors = 'pt').to('cuda')\n",
    "generate_kwargs = dict(\n",
    "    input_ids=inputs,\n",
    "    max_new_tokens=2048,\n",
    "    top_p=0.95,\n",
    "    top_k=50,\n",
    "    temperature=0.9,\n",
    "    do_sample=True,\n",
    "    repetition_penalty=1.1,\n",
    "    streamer=streamer\n",
    ")\n",
    "generation_output = ori_model.generate(**generate_kwargs)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "id": "c2ccd166",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "The attention mask and the pad token id were not set. As a consequence, you may observe unexpected behavior. Please pass your input's `attention_mask` to obtain reliable results.\n",
      "Setting `pad_token_id` to `eos_token_id`:None for open-end generation.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<|begin_of_text|><|start_header_id|>system<|end_header_id|>\n",
      "\n",
      "Cutting Knowledge Date: December 2023\n",
      "Today Date: 21 Oct 2024\n",
      "\n",
      "<|eot_id|><|start_header_id|>user<|end_header_id|>\n",
      "\n",
      "camne nk code simple hello world react, reply in perak<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n",
      "\n",
      "Ate, teman nak buat skrip yang senang ni untuk kome. Tengok ye:\n",
      "\n",
      "```javascript\n",
      "console.log(\"Hello World dari React!\");\n",
      "```\n",
      "\n",
      "Ni lah care mike boleh letak dalam HTML die:\n",
      "\n",
      "```html\n",
      "<!DOCTYPE html>\n",
      "<html lang=\"en\">\n",
      "<head>\n",
      "    <meta charset=\"UTF-8\">\n",
      "    <title>Hello World dari React</title>\n",
      "</head>\n",
      "<body>\n",
      "<script>\n",
      "console.log(\"Hello World dari React!\");\n",
      "</script> <!-- Ni kod JavaScript je lah, tapi tak kene pakai JavaScript -->\n",
      "</body>\n",
      "</html>\n",
      "```\n",
      "\n",
      "Mike kene tambah ni kat paling bawah HTML tu: `<script>` ngan `<script>...</script>`. Kalo gune npm atau yarn utk nambahkan kebergantungan, pastikan dah ade tempat ujian.js.\n",
      "\n",
      "Tapi ingat, walaupun buat macam ni senang je, kalau mike nak buat React yang lagi bagus, mungkin kene tambah sikit-sikit lebih lagi.\n",
      "\n",
      "Jadi, tengok ye, makin le sekarang! Ape pengalaman mike dengan cara ni?<|eot_id|>\n"
     ]
    }
   ],
   "source": [
    "d = [\n",
    "    {'role': 'user', 'content': 'camne nk code simple hello world react, reply in perak'}\n",
    "]\n",
    "\n",
    "inputs = tokenizer.apply_chat_template(d, return_tensors = 'pt').to('cuda')\n",
    "generate_kwargs = dict(\n",
    "    input_ids=inputs,\n",
    "    max_new_tokens=512,\n",
    "    top_p=0.95,\n",
    "    top_k=50,\n",
    "    temperature=0.9,\n",
    "    do_sample=True,\n",
    "    repetition_penalty=1.1,\n",
    "    streamer=streamer\n",
    ")\n",
    "generation_output = ori_model.generate(**generate_kwargs)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "d640eab3",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "The attention mask and the pad token id were not set. As a consequence, you may observe unexpected behavior. Please pass your input's `attention_mask` to obtain reliable results.\n",
      "Setting `pad_token_id` to `eos_token_id`:None for open-end generation.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<|begin_of_text|><|start_header_id|>system<|end_header_id|>\n",
      "\n",
      "Cutting Knowledge Date: December 2023\n",
      "Today Date: 21 Oct 2024\n",
      "\n",
      "<|eot_id|><|start_header_id|>user<|end_header_id|>\n",
      "\n",
      "camne nk code react<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n",
      "\n",
      "Saya akan membantu anda dengan menghasilkan kod React yang mudah. Berikut adalah contoh kod untuk membuat komponen yang memaparkan senarai item:\n",
      "\n",
      "```jsx\n",
      "import React, { useState } from \"react\";\n",
      "\n",
      "function ItemList() {\n",
      "  const [items, setItems] = useState([\n",
      "    { id: 1, name: 'Item 1' },\n",
      "    { id: 2, name: 'Item 2' },\n",
      "    { id: 3, name: 'Item 3' }\n",
      "  ]);\n",
      "\n",
      "  return (\n",
      "    <div>\n",
      "      {items.map((item) => (\n",
      "        <p key={item.id}>{item.name}</p>\n",
      "      ))}\n",
      "    </div>\n",
      "  );\n",
      "}\n",
      "\n",
      "export default ItemList;\n",
      "```\n",
      "\n",
      "Kod di atas menggunakan hook `useState` untuk menyimpan array item dalam keadaan dan menggunakannya sebagai prop ke komponen lain.\n",
      "\n",
      "Untuk melaksanakan fungsi ini, anda perlu menambahkan komponen baru dalam projek React anda. Contohnya, jika anda telah mencipta komponen `App`, anda boleh menambahkan komponen `ItemList` seperti berikut:\n",
      "\n",
      "```jsx\n",
      "// App.js (contoh)\n",
      "\n",
      "import React from \"react\";\n",
      "import ItemList from \"./ItemList\"; // Import komponen ItemList dari fail ItemList.js\n",
      "\n",
      "const App = () => {\n",
      "  return (\n",
      "    <div className=\"App\">\n",
      "      <h1>Senarai Item</h1>\n",
      "      <ItemList />\n",
      "    </div>\n",
      "  );\n",
      "};\n",
      "\n",
      "export default App;\n",
      "```\n",
      "\n",
      "Dalam contoh ini, kita telah mencipta komponen `ItemList` yang menerima array item sebagai prop dan mengembalikan elemen `<p>` yang memaparkan nama setiap item. Komponen `App` kemudian menggunakan komponen `ItemList` untuk memaparkan senarai item.<|eot_id|>\n"
     ]
    }
   ],
   "source": [
    "d = [\n",
    "    {'role': 'user', 'content': 'camne nk code react'}\n",
    "]\n",
    "\n",
    "inputs = tokenizer.apply_chat_template(d, return_tensors = 'pt').to('cuda')\n",
    "generate_kwargs = dict(\n",
    "    input_ids=inputs,\n",
    "    max_new_tokens=1024,\n",
    "    top_p=0.95,\n",
    "    top_k=50,\n",
    "    temperature=0.2,\n",
    "    do_sample=True,\n",
    "    repetition_penalty=1.1,\n",
    "    streamer=streamer\n",
    ")\n",
    "generation_output = ori_model.generate(**generate_kwargs)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "d077bcc3",
   "metadata": {},
   "outputs": [],
   "source": [
    "ori_model = ori_model.to(torch.bfloat16)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "bf2223dc",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "cd0889955d224f55834c4837685ec0a3",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "README.md:   0%|          | 0.00/673 [00:00<?, ?B/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "024ed67727924648b4a114f08a2c4211",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "model.safetensors:   0%|          | 0.00/3.00G [00:00<?, ?B/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "CommitInfo(commit_url='https://huggingface.co/mesolitica/malaysian-Llama-3.2-1B-Instruct/commit/2735bd550af3cb5dc31c58a37f1d1228ead60191', commit_message='Upload LlamaForCausalLM', commit_description='', oid='2735bd550af3cb5dc31c58a37f1d1228ead60191', pr_url=None, pr_revision=None, pr_num=None)"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ori_model.push_to_hub('mesolitica/malaysian-Llama-3.2-1B-Instruct')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "615cb675",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "python3.10",
   "language": "python",
   "name": "python3.10"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.15"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
